
<!DOCTYPE HTML>
<html lang="" >
    <head>
        <meta charset="UTF-8">
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
        <title>Aggregate · GitBook</title>
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="description" content="">
        <meta name="generator" content="GitBook 3.2.3">
        
        
        
    
    <link rel="stylesheet" href="../../../gitbook/style.css">

    
            
                
                <link rel="stylesheet" href="../../../gitbook/gitbook-plugin-highlight/website.css">
                
            
                
                <link rel="stylesheet" href="../../../gitbook/gitbook-plugin-search/search.css">
                
            
                
                <link rel="stylesheet" href="../../../gitbook/gitbook-plugin-fontsettings/website.css">
                
            
        

    

    
        
        <link rel="stylesheet" href="../../../styles/website.css">
        
    
        
    
        
    
        
    
        
    
        
    

        
    
    
    <meta name="HandheldFriendly" content="true"/>
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <link rel="apple-touch-icon-precomposed" sizes="152x152" href="../../../gitbook/images/apple-touch-icon-precomposed-152.png">
    <link rel="shortcut icon" href="../../../gitbook/images/favicon.ico" type="image/x-icon">

    
    <link rel="next" href="multi-entity-aggregates.html" />
    
    
    <link rel="prev" href="./" />
    

    </head>
    <body>
        
<div class="book">
    <div class="book-summary">
        
            
<div id="book-search-input" role="search">
    <input type="text" placeholder="Type to search" />
</div>

            
                <nav role="navigation">
                


<ul class="summary">
    
    

    

    
        
        
    
        <li class="chapter " data-level="1.1" data-path="../../../">
            
                <a href="../../../">
            
                    
                    Introduction
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2" data-path="../../../architecture-overview/">
            
                <a href="../../../architecture-overview/">
            
                    
                    Architecture Overview
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.2.1" data-path="../../../architecture-overview/ddd-cqrs-concepts.html">
            
                <a href="../../../architecture-overview/ddd-cqrs-concepts.html">
            
                    
                    DDD & CQRS Concepts
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.2" data-path="../../../architecture-overview/event-sourcing.html">
            
                <a href="../../../architecture-overview/event-sourcing.html">
            
                    
                    Event Sourcing
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.2.3" data-path="../../../architecture-overview/event-driven-microservices.html">
            
                <a href="../../../architecture-overview/event-driven-microservices.html">
            
                    
                    Event-Driven Microservices
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.3" data-path="../../../axon-server-introduction.html">
            
                <a href="../../../axon-server-introduction.html">
            
                    
                    Axon Server
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.4" data-path="../../../release-notes/">
            
                <a href="../../../release-notes/">
            
                    
                    Release Notes
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.4.1" data-path="../../../release-notes/rn-axon-framework/">
            
                <a href="../../../release-notes/rn-axon-framework/">
            
                    
                    Axon Framework
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.4.1.1" data-path="../../../release-notes/rn-axon-framework/rn-af-major-releases.html">
            
                <a href="../../../release-notes/rn-axon-framework/rn-af-major-releases.html">
            
                    
                    Major Releases
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.4.1.2" data-path="../../../release-notes/rn-axon-framework/rn-af-minor-releases.html">
            
                <a href="../../../release-notes/rn-axon-framework/rn-af-minor-releases.html">
            
                    
                    Minor Releases
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.4.2" data-path="../../../release-notes/rn-axon-server/">
            
                <a href="../../../release-notes/rn-axon-server/">
            
                    
                    Axon Server
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="1.4.2.1" data-path="../../../release-notes/rn-axon-server/rn-as-major-releases.html">
            
                <a href="../../../release-notes/rn-axon-server/rn-as-major-releases.html">
            
                    
                    Major Releases
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.4.2.2" data-path="../../../release-notes/rn-axon-server/rn-asse-minor-releases.html">
            
                <a href="../../../release-notes/rn-axon-server/rn-asse-minor-releases.html">
            
                    
                    Minor Releases Standard Edition
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="1.4.2.3" data-path="../../../release-notes/rn-axon-server/rn-as-minor-releases.html">
            
                <a href="../../../release-notes/rn-axon-server/rn-as-minor-releases.html">
            
                    
                    Minor Releases Enterprise Edition
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="1.4.3" data-path="../../../release-notes/axon-framework-extensions.html">
            
                <a href="../../../release-notes/axon-framework-extensions.html">
            
                    
                    Axon Framework Extensions
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    

    
        
        <li class="header">Getting Started</li>
        
        
    
        <li class="chapter " data-level="2.1" data-path="../../../getting-started/quick-start.html">
            
                <a href="../../../getting-started/quick-start.html">
            
                    
                    Quick Start
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">Axon Framework</li>
        
        
    
        <li class="chapter " data-level="3.1" data-path="../../introduction.html">
            
                <a href="../../introduction.html">
            
                    
                    Introduction
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.2" data-path="../../messaging-concepts/">
            
                <a href="../../messaging-concepts/">
            
                    
                    Messaging Concepts
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="3.2.1" data-path="../../messaging-concepts/anatomy-message.html">
            
                <a href="../../messaging-concepts/anatomy-message.html">
            
                    
                    Anatomy of a Message
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.2.2" data-path="../../messaging-concepts/message-correlation.html">
            
                <a href="../../messaging-concepts/message-correlation.html">
            
                    
                    Message Correlation
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.2.3" data-path="../../messaging-concepts/message-intercepting.html">
            
                <a href="../../messaging-concepts/message-intercepting.html">
            
                    
                    Message Intercepting
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.2.4" data-path="../../messaging-concepts/supported-parameters-annotated-handlers.html">
            
                <a href="../../messaging-concepts/supported-parameters-annotated-handlers.html">
            
                    
                    Supported Parameters for Annotated Handlers
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.2.5" data-path="../../messaging-concepts/exception-handling.html">
            
                <a href="../../messaging-concepts/exception-handling.html">
            
                    
                    Exception Handling
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.2.6" data-path="../../messaging-concepts/unit-of-work.html">
            
                <a href="../../messaging-concepts/unit-of-work.html">
            
                    
                    Unit of Work
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="3.3" data-path="../">
            
                <a href="../">
            
                    
                    Commands
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="3.3.1" data-path="./">
            
                <a href="./">
            
                    
                    Modeling
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter active" data-level="3.3.1.1" data-path="aggregate.html">
            
                <a href="aggregate.html">
            
                    
                    Aggregate
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.3.1.2" data-path="multi-entity-aggregates.html">
            
                <a href="multi-entity-aggregates.html">
            
                    
                    Multi-Entity Aggregates
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.3.1.3" data-path="state-stored-aggregates.html">
            
                <a href="state-stored-aggregates.html">
            
                    
                    State Stored Aggregates
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.3.1.4" data-path="aggregate-creation-from-another-aggregate.html">
            
                <a href="aggregate-creation-from-another-aggregate.html">
            
                    
                    Aggregate Creation from another Aggregate
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.3.1.5" data-path="aggregate-polymorphism.html">
            
                <a href="aggregate-polymorphism.html">
            
                    
                    Aggregate Polymorphism
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.3.1.6" data-path="conflict-resolution.html">
            
                <a href="conflict-resolution.html">
            
                    
                    Conflict Resolution
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="3.3.2" data-path="../command-dispatchers.html">
            
                <a href="../command-dispatchers.html">
            
                    
                    Command Dispatchers
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.3.3" data-path="../command-handlers.html">
            
                <a href="../command-handlers.html">
            
                    
                    Command Handlers
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.3.4" data-path="../infrastructure.html">
            
                <a href="../infrastructure.html">
            
                    
                    Infrastructure
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.3.5" data-path="../configuration.html">
            
                <a href="../configuration.html">
            
                    
                    Configuration
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="3.4" data-path="../../events/">
            
                <a href="../../events/">
            
                    
                    Events
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="3.4.1" data-path="../../events/event-dispatchers.html">
            
                <a href="../../events/event-dispatchers.html">
            
                    
                    Event Dispatchers
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.4.2" data-path="../../events/event-handlers.html">
            
                <a href="../../events/event-handlers.html">
            
                    
                    Event Handlers
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.4.3" data-path="../../events/event-processors/">
            
                <a href="../../events/event-processors/">
            
                    
                    Event Processors
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="3.4.3.1" data-path="../../events/event-processors/subscribing.html">
            
                <a href="../../events/event-processors/subscribing.html">
            
                    
                    Subscribing Event Processors
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.4.3.2" data-path="../../events/event-processors/streaming.html">
            
                <a href="../../events/event-processors/streaming.html">
            
                    
                    Streaming Event Processors
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="3.4.4" data-path="../../events/event-bus-and-event-store.html">
            
                <a href="../../events/event-bus-and-event-store.html">
            
                    
                    Event Bus & Event Store
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.4.5" data-path="../../events/event-versioning.html">
            
                <a href="../../events/event-versioning.html">
            
                    
                    Event Versioning
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.4.6" data-path="../../events/event-serialization.html">
            
                <a href="../../events/event-serialization.html">
            
                    
                    Event Serialization
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="3.5" data-path="../../queries/">
            
                <a href="../../queries/">
            
                    
                    Queries
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="3.5.1" data-path="../../queries/query-processing.html">
            
                <a href="../../queries/query-processing.html">
            
                    
                    Query Processing
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.5.2" data-path="../../queries/query-dispatchers.html">
            
                <a href="../../queries/query-dispatchers.html">
            
                    
                    Query Dispatchers
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.5.3" data-path="../../queries/query-handlers.html">
            
                <a href="../../queries/query-handlers.html">
            
                    
                    Query Handlers
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.5.4" data-path="../../queries/implementations.html">
            
                <a href="../../queries/implementations.html">
            
                    
                    Implementations
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.5.5" data-path="../../queries/configuration.html">
            
                <a href="../../queries/configuration.html">
            
                    
                    Configuration
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="3.6" data-path="../../sagas/">
            
                <a href="../../sagas/">
            
                    
                    Sagas
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="3.6.1" data-path="../../sagas/implementation.html">
            
                <a href="../../sagas/implementation.html">
            
                    
                    Implementation
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.6.2" data-path="../../sagas/associations.html">
            
                <a href="../../sagas/associations.html">
            
                    
                    Associations
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.6.3" data-path="../../sagas/infrastructure.html">
            
                <a href="../../sagas/infrastructure.html">
            
                    
                    Infrastructure
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="3.7" data-path="../../deadlines/">
            
                <a href="../../deadlines/">
            
                    
                    Deadlines
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="3.7.1" data-path="../../deadlines/deadline-managers.html">
            
                <a href="../../deadlines/deadline-managers.html">
            
                    
                    Deadline Managers
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.7.2" data-path="../../deadlines/event-schedulers.html">
            
                <a href="../../deadlines/event-schedulers.html">
            
                    
                    Event Schedulers
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="3.8" data-path="../../testing/">
            
                <a href="../../testing/">
            
                    
                    Testing
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="3.8.1" data-path="../../testing/commands-events.html">
            
                <a href="../../testing/commands-events.html">
            
                    
                    Commands / Events
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.8.2" data-path="../../testing/sagas-1.html">
            
                <a href="../../testing/sagas-1.html">
            
                    
                    Sagas
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="3.9" data-path="../../tuning/">
            
                <a href="../../tuning/">
            
                    
                    Tuning
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="3.9.1" data-path="../../tuning/event-snapshots.html">
            
                <a href="../../tuning/event-snapshots.html">
            
                    
                    Event Snapshots
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.9.2" data-path="../../tuning/event-processing.html">
            
                <a href="../../tuning/event-processing.html">
            
                    
                    Event Processing
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.9.3" data-path="../../tuning/command-processing.html">
            
                <a href="../../tuning/command-processing.html">
            
                    
                    Command Processing
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="3.10" data-path="../../monitoring-and-metrics.html">
            
                <a href="../../monitoring-and-metrics.html">
            
                    
                    Monitoring and Metrics
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.11" data-path="../../spring-boot-integration.html">
            
                <a href="../../spring-boot-integration.html">
            
                    
                    Spring Boot Integration
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="3.12" data-path="../../modules.html">
            
                <a href="../../modules.html">
            
                    
                    Modules
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">Axon Server</li>
        
        
    
        <li class="chapter " data-level="4.1" data-path="../../../axon-server/introduction.html">
            
                <a href="../../../axon-server/introduction.html">
            
                    
                    Introduction
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.2" data-path="../../../axon-server/installation/">
            
                <a href="../../../axon-server/installation/">
            
                    
                    Installation
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="4.2.1" data-path="../../../axon-server/installation/local-installation/">
            
                <a href="../../../axon-server/installation/local-installation/">
            
                    
                    Local Installation
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="4.2.1.1" data-path="../../../axon-server/installation/local-installation/axon-server-se.html">
            
                <a href="../../../axon-server/installation/local-installation/axon-server-se.html">
            
                    
                    Axon Server SE
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.2.1.2" data-path="../../../axon-server/installation/local-installation/axon-server-ee.html">
            
                <a href="../../../axon-server/installation/local-installation/axon-server-ee.html">
            
                    
                    Axon Server EE
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="4.2.2" data-path="../../../axon-server/installation/docker-k8s/">
            
                <a href="../../../axon-server/installation/docker-k8s/">
            
                    
                    Docker / K8s
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="4.2.2.1" data-path="../../../axon-server/installation/docker-k8s/axon-server-se.html">
            
                <a href="../../../axon-server/installation/docker-k8s/axon-server-se.html">
            
                    
                    Axon Server SE
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.2.2.2" data-path="../../../axon-server/installation/docker-k8s/axon-server-ee.html">
            
                <a href="../../../axon-server/installation/docker-k8s/axon-server-ee.html">
            
                    
                    Axon Server EE
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="4.3" data-path="../../../axon-server/administration/">
            
                <a href="../../../axon-server/administration/">
            
                    
                    Administration
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="4.3.1" data-path="../../../axon-server/administration/admin-configuration/">
            
                <a href="../../../axon-server/administration/admin-configuration/">
            
                    
                    Configuration
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="4.3.1.1" data-path="../../../axon-server/administration/admin-configuration/configuration.html">
            
                <a href="../../../axon-server/administration/admin-configuration/configuration.html">
            
                    
                    System Properties
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.3.1.2" data-path="../../../axon-server/administration/admin-configuration/command-line-interface.html">
            
                <a href="../../../axon-server/administration/admin-configuration/command-line-interface.html">
            
                    
                    Command Line Interface
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.3.1.3" data-path="../../../axon-server/administration/admin-configuration/rest-api.html">
            
                <a href="../../../axon-server/administration/admin-configuration/rest-api.html">
            
                    
                    REST API
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="4.3.2" data-path="../../../axon-server/administration/monitoring/">
            
                <a href="../../../axon-server/administration/monitoring/">
            
                    
                    Monitoring
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="4.3.2.1" data-path="../../../axon-server/administration/monitoring/actuator-endpoints.html">
            
                <a href="../../../axon-server/administration/monitoring/actuator-endpoints.html">
            
                    
                    Actuator Endpoints
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.3.2.2" data-path="../../../axon-server/administration/monitoring/grpc-metrics.html">
            
                <a href="../../../axon-server/administration/monitoring/grpc-metrics.html">
            
                    
                    gRPC Metrics
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.3.2.3" data-path="../../../axon-server/administration/monitoring/heartbeat-monitoring.html">
            
                <a href="../../../axon-server/administration/monitoring/heartbeat-monitoring.html">
            
                    
                    Heartbeat Monitoring
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="4.3.3" data-path="../../../axon-server/administration/clustering.html">
            
                <a href="../../../axon-server/administration/clustering.html">
            
                    
                    Clusters
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.3.4" data-path="../../../axon-server/administration/replication-groups.html">
            
                <a href="../../../axon-server/administration/replication-groups.html">
            
                    
                    Replication Groups
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.3.5" data-path="../../../axon-server/administration/multi-context.html">
            
                <a href="../../../axon-server/administration/multi-context.html">
            
                    
                    Multi-Context
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.3.6" data-path="../../../axon-server/administration/tagging.html">
            
                <a href="../../../axon-server/administration/tagging.html">
            
                    
                    Tagging
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.3.7" data-path="../../../axon-server/administration/backup-and-messaging-only-nodes.html">
            
                <a href="../../../axon-server/administration/backup-and-messaging-only-nodes.html">
            
                    
                    Backup and Messaging-only Nodes
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.3.8" data-path="../../../axon-server/administration/backups.html">
            
                <a href="../../../axon-server/administration/backups.html">
            
                    
                    Backups
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.3.9" data-path="../../../axon-server/administration/recovery.html">
            
                <a href="../../../axon-server/administration/recovery.html">
            
                    
                    Recovery
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.3.10" data-path="../../../axon-server/administration/plugins.html">
            
                <a href="../../../axon-server/administration/plugins.html">
            
                    
                    Plugins
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.3.11" data-path="../../../axon-server/administration/error-codes.html">
            
                <a href="../../../axon-server/administration/error-codes.html">
            
                    
                    Error Codes
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="4.4" data-path="../../../axon-server/security/">
            
                <a href="../../../axon-server/security/">
            
                    
                    Security
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="4.4.1" data-path="../../../axon-server/security/ssl.html">
            
                <a href="../../../axon-server/security/ssl.html">
            
                    
                    SSL
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.4.2" data-path="../../../axon-server/security/access-control.html">
            
                <a href="../../../axon-server/security/access-control.html">
            
                    
                    Access Control
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.4.3" data-path="../../../axon-server/security/access-control-se.html">
            
                <a href="../../../axon-server/security/access-control-se.html">
            
                    
                    Access Control - Standard Edition
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.4.4" data-path="../../../axon-server/security/access-control-ee.html">
            
                <a href="../../../axon-server/security/access-control-ee.html">
            
                    
                    Access Control - Enterprise Edition
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.4.5" data-path="../../../axon-server/security/access-control-clients.html">
            
                <a href="../../../axon-server/security/access-control-clients.html">
            
                    
                    Access Control - Client Applications
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.4.6" data-path="../../../axon-server/security/access-control-cli.html">
            
                <a href="../../../axon-server/security/access-control-cli.html">
            
                    
                    Access Control - CLI
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.4.7" data-path="../../../axon-server/security/access-control-api.html">
            
                <a href="../../../axon-server/security/access-control-api.html">
            
                    
                    Access Control - API
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.4.8" data-path="../../../axon-server/security/access-control-ldap.html">
            
                <a href="../../../axon-server/security/access-control-ldap.html">
            
                    
                    Access Control - LDAP
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.4.9" data-path="../../../axon-server/security/access-control-oauth2.html">
            
                <a href="../../../axon-server/security/access-control-oauth2.html">
            
                    
                    Access Control - OAuth 2.0
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="4.5" data-path="../../../axon-server/performance/">
            
                <a href="../../../axon-server/performance/">
            
                    
                    Performance
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="4.5.1" data-path="../../../axon-server/performance/tuning-event-processing.html">
            
                <a href="../../../axon-server/performance/tuning-event-processing.html">
            
                    
                    Event Segments
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.5.2" data-path="../../../axon-server/performance/flow-control.html">
            
                <a href="../../../axon-server/performance/flow-control.html">
            
                    
                    Flow Control
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="4.6" data-path="../../../axon-server/migration/">
            
                <a href="../../../axon-server/migration/">
            
                    
                    Migration
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="4.6.1" data-path="../../../axon-server/migration/standard-to-enterprise-edition.html">
            
                <a href="../../../axon-server/migration/standard-to-enterprise-edition.html">
            
                    
                    Standard to Enterprise Edition
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="4.6.2" data-path="../../../axon-server/migration/non-axon-server-to-axon-server.html">
            
                <a href="../../../axon-server/migration/non-axon-server-to-axon-server.html">
            
                    
                    Non-Axon Server to Axon Server
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    

    
        
        <li class="header">Extensions</li>
        
        
    
        <li class="chapter " data-level="5.1" data-path="../../../extensions/spring-amqp.html">
            
                <a href="../../../extensions/spring-amqp.html">
            
                    
                    Spring AMQP
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="5.2" data-path="../../../extensions/jgroups.html">
            
                <a href="../../../extensions/jgroups.html">
            
                    
                    JGroups
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="5.3" data-path="../../../extensions/kafka.html">
            
                <a href="../../../extensions/kafka.html">
            
                    
                    Kafka
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="5.4" data-path="../../../extensions/kotlin.html">
            
                <a href="../../../extensions/kotlin.html">
            
                    
                    Kotlin
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="5.5" data-path="../../../extensions/mongo.html">
            
                <a href="../../../extensions/mongo.html">
            
                    
                    Mongo
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="5.6" data-path="../../../extensions/reactor/reactor.html">
            
                <a href="../../../extensions/reactor/reactor.html">
            
                    
                    Reactor
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="5.6.1" data-path="../../../extensions/reactor/reactive-gateways/reactive-gateways.html">
            
                <a href="../../../extensions/reactor/reactive-gateways/reactive-gateways.html">
            
                    
                    Reactor Gateways
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="5.7" data-path="../../../extensions/spring-cloud.html">
            
                <a href="../../../extensions/spring-cloud.html">
            
                    
                    Spring Cloud
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="5.8" data-path="../../../extensions/tracing.html">
            
                <a href="../../../extensions/tracing.html">
            
                    
                    Tracing
            
                </a>
            

            
        </li>
    

    
        
        <li class="header">Appendices</li>
        
        
    
        <li class="chapter " data-level="6.1" data-path="../../../appendices/rdbms-tuning.html">
            
                <a href="../../../appendices/rdbms-tuning.html">
            
                    
                    A. RDBMS Tuning
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.2" data-path="../../../appendices/message-handler-tuning/">
            
                <a href="../../../appendices/message-handler-tuning/">
            
                    
                    B. Message Handler Tuning
            
                </a>
            

            
            <ul class="articles">
                
    
        <li class="chapter " data-level="6.2.1" data-path="../../../appendices/message-handler-tuning/parameter-resolvers.html">
            
                <a href="../../../appendices/message-handler-tuning/parameter-resolvers.html">
            
                    
                    Parameter Resolvers
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.2.2" data-path="../../../appendices/message-handler-tuning/handler-enhancers.html">
            
                <a href="../../../appendices/message-handler-tuning/handler-enhancers.html">
            
                    
                    Handler Enhancers
            
                </a>
            

            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="6.3" data-path="../../../appendices/meta-annotations.html">
            
                <a href="../../../appendices/meta-annotations.html">
            
                    
                    C. Meta Annotations
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.4" data-path="../../../appendices/identifier-generation.html">
            
                <a href="../../../appendices/identifier-generation.html">
            
                    
                    D. Identifier Generation
            
                </a>
            

            
        </li>
    
        <li class="chapter " data-level="6.5" data-path="../../../appendices/query-reference.html">
            
                <a href="../../../appendices/query-reference.html">
            
                    
                    E. Axon Server Query Language
            
                </a>
            

            
        </li>
    

    

    <li class="divider"></li>

    <li>
        <a href="https://www.gitbook.com" target="blank" class="gitbook-link">
            Published with GitBook
        </a>
    </li>
</ul>


                </nav>
            
        
    </div>

    <div class="book-body">
        
            <div class="body-inner">
                
                    

<div class="book-header" role="navigation">
    

    <!-- Title -->
    <h1>
        <i class="fa fa-circle-o-notch fa-spin"></i>
        <a href="../../.." >Aggregate</a>
    </h1>
</div>




                    <div class="page-wrapper" tabindex="-1" role="main">
                        <div class="page-inner">
                            
<div id="book-search-results">
    <div class="search-noresults">
    
                                <section class="normal markdown-section">
                                
                                <h1 id="aggregate">Aggregate</h1>
<p>This chapter will cover the basics on how to implement an &apos;<a href="../../../architecture-overview/ddd-cqrs-concepts.html#aggregates">Aggregate</a>&apos;. For more details on what an Aggregate is read the <a href="../../../architecture-overview/ddd-cqrs-concepts.html">DDD and CQRS concepts</a> page.</p>
<h2 id="basic-aggregate-structure">Basic Aggregate Structure</h2>
<p>An Aggregate is a regular object, which contains state and methods to alter that state. When creating the Aggregate object, you are effectively creating the &apos;Aggregate Root&apos;, typically carrying the name of the entire Aggregate. For the purpose of this description the &apos;Gift Card&apos; domain will be used, which brings us the <code>GiftCard</code> as the Aggregate (Root). By default, Axon will configure your Aggregate as an &apos;Event Sourced&apos; Aggregate (as described <a href="../../../architecture-overview/event-sourcing.html">here</a>). Henceforth our basic <code>GiftCard</code> Aggregate structure will focus on the Event Sourcing approach:</p>
<pre><code class="lang-java"><span class="hljs-keyword">import</span> org.axonframework.commandhandling.CommandHandler;
<span class="hljs-keyword">import</span> org.axonframework.eventsourcing.EventSourcingHandler;
<span class="hljs-keyword">import</span> org.axonframework.modelling.command.AggregateIdentifier;

<span class="hljs-keyword">import</span> <span class="hljs-keyword">static</span> org.axonframework.modelling.command.AggregateLifecycle.apply;

<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">GiftCard</span> </span>{

    <span class="hljs-meta">@AggregateIdentifier</span> <span class="hljs-comment">// 1.</span>
    <span class="hljs-keyword">private</span> String id;

    <span class="hljs-meta">@CommandHandler</span> <span class="hljs-comment">// 2.</span>
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">GiftCard</span><span class="hljs-params">(IssueCardCommand cmd)</span> </span>{
        <span class="hljs-comment">// 3.</span>
       apply(<span class="hljs-keyword">new</span> CardIssuedEvent(cmd.getCardId(), cmd.getAmount()));
    }

    <span class="hljs-meta">@EventSourcingHandler</span> <span class="hljs-comment">// 4.</span>
    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">on</span><span class="hljs-params">(CardIssuedEvent evt)</span> </span>{
        id = evt.getCardId();
    }

    <span class="hljs-comment">// 5.</span>
    <span class="hljs-function"><span class="hljs-keyword">protected</span> <span class="hljs-title">GiftCard</span><span class="hljs-params">()</span> </span>{
    }
    <span class="hljs-comment">// omitted command handlers and event sourcing handlers</span>
}
</code></pre>
<p>There are a couple of noteworthy concepts from the given code snippets, marked with numbered Java comments referring to the following bullets:</p>
<ol>
<li><p>The <code>@AggregateIdentifier</code> is the external reference point to into the <code>GiftCard</code> Aggregate.
This field is a hard requirement, as without it Axon will not know to which Aggregate a given Command is targeted.
Note that this annotation can be placed on a field and a method.</p>
</li>
<li><p>A <code>@CommandHandler</code> annotated constructor, or differently put the &apos;command handling constructor&apos;.</p>
<p>This annotation tells the framework that the given constructor is capable of handling the <code>IssueCardCommand</code>.</p>
<p>The <code>@CommandHandler</code> annotated functions are the place where you would put your <em>decision-making/business logic</em>.</p>
</li>
<li><p>The static <code>AggregateLifecycle#apply(Object...)</code> is what is used when an Event Message should be published.</p>
<p>Upon calling this function the provided <code>Object</code>s will be published as <code>EventMessage</code>s within the scope of the Aggregate they are applied in.</p>
</li>
<li><p>Using the <code>@EventSourcingHandler</code> is what tells the framework that the annotated function should be called when the Aggregate is &apos;sourced from its events&apos;.</p>
<p>As all the Event Sourcing Handlers combined will form the Aggregate, this is where all the <em>state changes</em> happen.</p>
<p>Note that the Aggregate Identifier <strong>must</strong> be set in the <code>@EventSourcingHandler</code> of the very first Event published by the aggregate.</p>
<p>This is usually the creation event. Lastly, <code>@EventSourcingHandler</code> annotated functions are resolved using specific rules.</p>
<p>These rules are the same for the <code>@EventHandler</code> annotated methods, and are thoroughly explained in <a href="../../events/event-handlers.html">Annotated Event Handler.</a></p>
</li>
<li><p>A no-arg constructor, which is required by Axon.</p>
<p>Axon Framework uses this constructor to create an empty aggregate instance before initializing it using past Events.</p>
<p>Failure to provide this constructor will result in an exception when loading the Aggregate.</p>
</li>
</ol>
<blockquote>
<p><strong>Modifiers for Message Handling functions</strong></p>
<p>Event Handler methods may be private, as long as the security settings of the JVM allow the Axon Framework to change the accessibility of the method. This allows you to clearly separate the public API of your Aggregate, which exposes the methods that generate events, from the internal logic, which processes the events.</p>
<p>Most IDE&apos;s have an option to ignore &quot;unused private method&quot; warnings for methods with a specific annotation. Alternatively, you can add an <code>@SuppressWarnings(&quot;UnusedDeclaration&quot;)</code> annotation to the method to make sure you do not accidentally delete an event handler method.</p>
</blockquote>
<h2 id="aggregate-lifecycle-operations">Aggregate Lifecycle Operations</h2>
<p>There are a couple of operations which are desirable to be performed whilst in the life cycle of an Aggregate. To that end, the <code>AggregateLifecycle</code> class in Axon provides a couple of static functions:</p>
<ol>
<li><p><code>apply(Object)</code> and <code>apply(Object, MetaData)</code>: The <code>AggregateLifecycle#apply</code> will publish an Event message on an <code>EventBus</code> such that it is known to have originated from the Aggregate executing the operation.</p>
<p>There is the possibility to provide just the Event <code>Object</code> or both the Event and some specific <a href="../../messaging-concepts/anatomy-message.html#meta-data">MetaData</a>.</p>
</li>
<li><p><code>createNew(Class, Callable)</code>: Instantiate a new Aggregate as a result of handling a Command.</p>
<p>Read <a href="aggregate-creation-from-another-aggregate.html">this</a> for more details on this.</p>
</li>
<li><p><code>isLive()</code>: Check to verify whether the Aggregate is in a &apos;live&apos; state.</p>
<p>An Aggregate is regarded to be &apos;live&apos; if it has finished replaying historic events to recreate it&apos;s state.</p>
<p>If the Aggregate is thus in the process of being event sourced, an <code>AggregateLifecycle.isLive()</code> call would return <code>false</code>.</p>
<p>Using this <code>isLive()</code> method, you can perform activity that should only be done when handling newly generated events.</p>
</li>
<li><p><code>markDeleted()</code>: Will mark the Aggregate instance calling the function as being &apos;deleted&apos;.</p>
<p>Useful if the domain specifies a given Aggregate can be removed/deleted/closed, after which it should no longer be allowed to handle any Commands.</p>
<p>This function should be called from an <code>@EventSourcingHandler</code> annotated function to ensure that <em>being marked deleted</em> is part of that Aggregate&apos;s state.</p>
</li>
</ol>

                                
                                </section>
                            
    </div>
    <div class="search-results">
        <div class="has-results">
            
            <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
            <ul class="search-results-list"></ul>
            
        </div>
        <div class="no-results">
            
            <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
            
        </div>
    </div>
</div>

                        </div>
                    </div>
                
            </div>

            
                
                <a href="./" class="navigation navigation-prev " aria-label="Previous page: Modeling">
                    <i class="fa fa-angle-left"></i>
                </a>
                
                
                <a href="multi-entity-aggregates.html" class="navigation navigation-next " aria-label="Next page: Multi-Entity Aggregates">
                    <i class="fa fa-angle-right"></i>
                </a>
                
            
        
    </div>

    <script>
        var gitbook = gitbook || [];
        gitbook.push(function() {
            gitbook.page.hasChanged({"page":{"title":"Aggregate","level":"3.3.1.1","depth":3,"next":{"title":"Multi-Entity Aggregates","level":"3.3.1.2","depth":3,"path":"axon-framework/axon-framework-commands/modeling/multi-entity-aggregates.md","ref":"axon-framework/axon-framework-commands/modeling/multi-entity-aggregates.md","articles":[]},"previous":{"title":"Modeling","level":"3.3.1","depth":2,"path":"axon-framework/axon-framework-commands/modeling/README.md","ref":"axon-framework/axon-framework-commands/modeling/README.md","articles":[{"title":"Aggregate","level":"3.3.1.1","depth":3,"path":"axon-framework/axon-framework-commands/modeling/aggregate.md","ref":"axon-framework/axon-framework-commands/modeling/aggregate.md","articles":[]},{"title":"Multi-Entity Aggregates","level":"3.3.1.2","depth":3,"path":"axon-framework/axon-framework-commands/modeling/multi-entity-aggregates.md","ref":"axon-framework/axon-framework-commands/modeling/multi-entity-aggregates.md","articles":[]},{"title":"State Stored Aggregates","level":"3.3.1.3","depth":3,"path":"axon-framework/axon-framework-commands/modeling/state-stored-aggregates.md","ref":"axon-framework/axon-framework-commands/modeling/state-stored-aggregates.md","articles":[]},{"title":"Aggregate Creation from another Aggregate","level":"3.3.1.4","depth":3,"path":"axon-framework/axon-framework-commands/modeling/aggregate-creation-from-another-aggregate.md","ref":"axon-framework/axon-framework-commands/modeling/aggregate-creation-from-another-aggregate.md","articles":[]},{"title":"Aggregate Polymorphism","level":"3.3.1.5","depth":3,"path":"axon-framework/axon-framework-commands/modeling/aggregate-polymorphism.md","ref":"axon-framework/axon-framework-commands/modeling/aggregate-polymorphism.md","articles":[]},{"title":"Conflict Resolution","level":"3.3.1.6","depth":3,"path":"axon-framework/axon-framework-commands/modeling/conflict-resolution.md","ref":"axon-framework/axon-framework-commands/modeling/conflict-resolution.md","articles":[]}]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"axon-framework/axon-framework-commands/modeling/aggregate.md","mtime":"2021-09-07T13:08:08.000Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2021-09-13T08:33:36.904Z"},"basePath":"../../..","book":{"language":""}});
        });
    </script>
</div>

        
    <script src="../../../gitbook/gitbook.js"></script>
    <script src="../../../gitbook/theme.js"></script>
    
        
        <script src="../../../gitbook/gitbook-plugin-search/search-engine.js"></script>
        
    
        
        <script src="../../../gitbook/gitbook-plugin-search/search.js"></script>
        
    
        
        <script src="../../../gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
        
    
        
        <script src="../../../gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
        
    
        
        <script src="../../../gitbook/gitbook-plugin-sharing/buttons.js"></script>
        
    
        
        <script src="../../../gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
        
    

    </body>
</html>

